Файл: Repka.txt

Дата: 10.04.2014

1: * Генератор вариаций на тему русской народной сказки РЕПКА
2: * Программа КОНЦЕПТ, 21.12.2010, www.gendoc.ru
3:
4: * Здесь случайным образом определяются ОВОЩ, который вырос очень большим 
5: * и цепочка (ЦЕПЬ) от 3-х до 5-ти людей и животных, кто этот овощ будут вытаскивать.
6: список выбратьСлучайный ОВОЩ репка;ананас;кабачок
7: присвоить КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ 'дед;баба;внучка;собака Жучка;кошка;мышка;медведь;бегемот;чудище мохнатое;Димка'
8: присвоить ЦЕПЬ {}
9: для (список сгенерить $результат 1 (список выбратьСлучайный $результат 3;4;5 ) )  
10:   список выбратьСлучайный ЕМУ_ПОВЕЗЛО [КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ]
11:   список сцепить ЦЕПЬ $ [ЕМУ_ПОВЕЗЛО]
12:   множество разность КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ $ [ЕМУ_ПОВЕЗЛО]
13: следующий
14:
15: * Для генерации классического варианта сказки про репку достаточно 
16: * удалить признак комментария (символ * в начале строки) у следующей строки
17:
18: *присвоить ОВОЩ репка ЦЕПЬ дед;баба;внучка;собака Жучка;кошка;мышка 
19:
20: * Инициализация грамматической базы данных
21: * Используется для правильного употребления слов в соответствии с правилами
22: * грамматики русского языка 
23:
24: факт добавить \
25:   r;сущ;дед;муж;деда \
26:   r;сущ;баба;жен;бабу \
27:   r;сущ;внучка;жен;внучку \
28:   'r;сущ;собака Жучка;жен;собаку Жучку' \
29:   r;сущ;кошка;жен;кошку \
30:   r;сущ;мышка;жен;мышку \
31:   r;сущ;медведь;муж;медведя \
32:   r;сущ;бегемот;муж;бегемота \
33:   'r;сущ;чудище мохнатое;ср;чудище мохнатое' \
34:   r;сущ;Димка;муж;Димку \
35:   r;сущ;репка;жен;репку \
36:   r;сущ;кабачок;муж;кабачок \
37:   r;сущ;ананас;муж;ананас \
38:   r;прил;большой;большая;большое \
39:   r;гл;посадил;посадила;посадило \
40:   r;гл;вырос;выросла;выросло \
41:   r;гл;позвал;позвала;позвало \
42:   r;гл;ухватился;ухватилась;ухватилось
43:
44: * Вспомогательные функции
45: * Используются для правильного употребления слов в соответствии с правилами
46: * грамматики русского языка 
47:
48: функция род? слово
49:   память локальный род
50:   если (факт сопоставитьСПервым $результат "r;сущ;[слово];[?род];[?]" )
51:   иначе
52:     показать сообщение "Не могу определить род слова '[слово]'."
53:     стоп
54:   конец
55:   присвоить $результат [род]
56: возврат
57:
58: функция словоформа слово часть_речи род падеж
59:   память локальный слово_на_печать вин_пад жен_род ср_род
60:   присвоить слово_на_печать [слово]
61:
62:   выбрать [часть_речи]
63:   вариант сущ
64:     факт сопоставитьСПервым _ "r;сущ;[слово];[?];[?вин_пад]"
65:     если [падеж] == вин
66:       присвоить слово_на_печать [вин_пад]
67:     конец
68:   вариант прил
69:     факт сопоставитьСПервым _ "r;прил;[слово];[?жен_род];[?ср_род]"
70:     список отобразить слово_на_печать [род] "муж;жен;ср" "[слово];[жен_род];[ср_род][слово]
71:   вариант гл
72:     факт сопоставитьСПервым _ "r;гл;[слово];[?жен_род];[?ср_род]"
73:     список отобразить слово_на_печать [род] "муж;жен;ср" "[слово];[жен_род];[ср_род][слово]
74:   конецВыбора
75:   присвоить $результат [слово_на_печать]
76: возврат
77:
78: функция Печать_предложения
79:   строка копировать первая_буква [ПРЕДЛОЖЕНИЕ] 1 1
80:   строка прописные первая_буква $
81:   строка присвоить ПРЕДЛОЖЕНИЕ $ 1 [первая_буква]
82:   >[ПРЕДЛОЖЕНИЕ]
83: возврат
84:
85: * Начало обобщенного шаблона сказки про репку
86:
87: * Генерация аналога: "Сказка про то, как посадил дед репку. Выросла репка очень большая.
88: * Дед тянет-потянет, а вытянуть не может." 
89: список голова ГЕРОЙ [ЦЕПЬ]  
90: строка сцепить ПРЕДЛОЖЕНИЕ 'Сказка про то, как '  \
91:   (словоформа посадил гл (род? [ГЕРОЙ] ) '' ) ' ' [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин )
92:   Печать_предложения
93: >(Вариация на тему русской народной сказки РЕПКА)
94: >
95: строка сцепить ПРЕДЛОЖЕНИЕ  \
96:   (словоформа посадил гл (род? [ГЕРОЙ] ) '' ) ' ' [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин ) .
97:   Печать_предложения
98: строка сцепить ПРЕДЛОЖЕНИЕ  \
99:   (словоформа вырос гл (род? [ОВОЩ] ) '' ) ' ' [ОВОЩ] ' очень ' (словоформа большой прил (род? [ОВОЩ] ) '' ) .
100:   Печать_предложения
101: строка сцепить ПРЕДЛОЖЕНИЕ  \
102:   [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин ) ' тянет-потянет, а вытянуть не может.'
103:   Печать_предложения
104:
105: * Генерация аналога: "Позвала баба внучку. Внучка за бабу, баба за деда, дед за репку.
106: * Тянут-потянут, а вытянуть не могут."
107: присвоить ЦЕПЬ_ТЯНУТ {}
108: для [ЦЕПЬ]
109:   список сцепить ЦЕПЬ_ТЯНУТ $ [$ОбъектЦикла]
110:   если [$СписокЦикла] != {}
111:     список голова ПОМОЩНИК [$СписокЦикла]
112:
113:     >
114:     строка сцепить ПРЕДЛОЖЕНИЕ  \
115:       (словоформа позвал гл (род? [$ОбъектЦикла] ) '' ) ' ' [$ОбъектЦикла] ' ' \
116:       (словоформа [ПОМОЩНИК] сущ '' вин ) .
117:     Печать_предложения
118:
119:     присвоить ПРЕДЛОЖЕНИЕ ''
120:     список инвертировать ЦЕПЬ_ТЯНУТ_ИНВ "[ЦЕПЬ_ТЯНУТ];[ПОМОЩНИК]"
121:     для [ЦЕПЬ_ТЯНУТ_ИНВ]
122:       если [$СписокЦикла] != {}
123:         если [$НомерИтерации] = 1
124:           строка сцепить ПРЕДЛОЖЕНИЕ $ (словоформа ухватился гл (род? [ПОМОЩНИК] ) '' ) ' '  
125:         конец
126:         строка сцепить ПРЕДЛОЖЕНИЕ $ [$ОбъектЦикла] ' за ' \
127:           (словоформа (список голова $результат [$СписокЦикла] ) сущ '' вин ) ', '
128:       конец
129:     следующий
130:     строка сцепить ПРЕДЛОЖЕНИЕ $ [ГЕРОЙ] ' за ' (словоформа [ОВОЩ] сущ '' вин ) .
131:     Печать_предложения
132:
133:     если (список размер $результат [$СписокЦикла] ) > 1
134:       >Тянут-потянут, а вытянуть не могут.
135:     конец
136:   конец
137: следующий
138:
139: * Счастливый конец сказки.
140: строка сцепить ПРЕДЛОЖЕНИЕ 'Тянут-потянут... И вытянули ' (словоформа [ОВОЩ] сущ '' вин ) !
141: Печать_предложения